home *** CD-ROM | disk | FTP | other *** search
- ;
- ; Dual playfield display example for AGA Amigas only.
- ;
- ; Demonstrates how to get the correct colours for the rear
- ; playfield by using DisplayControls - see Page 137 of the new
- ; manual or press RightAmiga/Help on the same line as the command ;)
- ;
- ; Ted Bailey 12/2/96
- ;
-
- NoCli
-
- ;SetErr:End:End SetErr
-
-
- SpriteMode 2 ; AGA only sprites (64 pixels wide)
-
- NEWTYPE.spr ; for the list of three AGA sprites
- sx.w ; x position
- xv.w ; x velocity
- sy.w ; y "
- yv.w ; y "
- ch.w ; sprite channel to display sprite through
- End NEWTYPE ;
-
- Dim List sprites.spr(2)
-
-
- BitMap 0,384,288,4 ; front playfield 16 colour bitmap
- BitMap 1,384,288,4 ; back playfield 16 colour bitmap
-
- InitShape 0,64,64,4 ; shape to turn into a sprite
- ShapesBitMap 0,2 ; for drawing directly onto shapes 'bitmap'
-
- InitPalette 0,256 ; colour regs 0 and 16 are transparent
- ; colour regs 1->15 are for front playfield
- ; colour regs 15->31 are for back playfield
- ; colour regs 240->255 are for sprites
-
- ; AGA dualplayfield, smoothscrolling display
- InitCopList 0,40,256,$10038,8,256,0
-
-
- ; make the back playfield use colour registers 16->31
- ; by putting %0001110000000000 ($1c00) into BPLCON3
- ; and make the sprites use colour registers 240->255
- ; by putting %0000000011101110 ($00ee) into BPLCON4
- DisplayControls 0,0,$1c00,$00ee
-
-
- VWait 50:BLITZ
-
- Gosub initcolours
- Gosub initbitmaps
- Gosub initsprites
-
- d.w=0 ; initialise 'degrees' counter
- fx.q=16 ; front playfield x starting position
- fy.q=16 ; " " y " "
- bx.q=16 ; back " x " "
- by.q=16 ; " " y " "
-
-
- CreateDisplay 0:DisplayPalette 0,0
-
- Repeat
- VWait
- DisplayBitMap 0,0,fx,fy,1,bx,by
-
- Gosub movesprites ; move/display 3 64*64 16 colour sprites
-
- ang.f=d*Pi/180 ;
- sinn=Sin(ang)*16 ; move front and back playfields
- coss=Cos(ang)*16 ; in a circle pattern
- ;
- fx=16+sinn ;
- fy=16+coss ;
- ;
- bx=16+coss ;
- by=16+sinn ;
-
- d+3:If d>359 Then d=0 ; increment degrees counter
-
- Until Joyb(0)
-
- End
-
-
- .initcolours
- ;
- For cr=1 To 15 ;
- AGAPalRGB 0,cr,0,Rnd(255),50+cr*10 ; front playfield colours
- Next ;
- ;
- For cr=17 To 31 ;
- AGAPalRGB 0,cr,50+cr*5,Rnd(255),0 ; back playfield colours
- Next ;
- ;
- For cr=240 To 255 ;
- col=(255-cr)*15 ;
- AGAPalRGB 0,cr,col,col,col ; sprite colours
- Next ;
- ;
- Return
-
-
- .initbitmaps
- ;
- Use BitMap 0 ; draw some random lines + circles on
- For i.w=1 To 15 ; the front bitmap
- For n.w=1 To 5
- Line Rnd(384),Rnd(288),Rnd(384),Rnd(288),i
- Circlef Rnd(384),Rnd(288),10+Rnd(10),10+Rnd(10),i
- Next
- Next
- ;
- Use BitMap 1 ; draw some random circles on the back
- For i=1 To 15 ; bitmap
- For n=1 To 5
- Circlef Rnd(384),Rnd(288),20+Rnd(10),20+Rnd(10),i
- Next
- Next
- ;
- Return
-
-
- .initsprites
- ;
- Use BitMap 2 ; draw some concentric circles on the
- For i=1 To 15 ; shapes' bitmap
- Circlef 32-i/2,32-i/2,32-i*2,16-i
- Next
- GetaSprite 0,0 ; turn the shape into a sprite
- Free Shape 0 ; get rid of shape
- ;
- chn.w=0 ; initialise sprite channel counter
- USEPATH sprites()
- While AddItem(sprites())
- \sx=50+Rnd(100) ;
- \xv=1+Rnd(4) ; initialise each sprites' x/y positions
- \sy=-50-Rnd(50) ; and velocities.
- \yv=1 ;
- \ch=chn ; set the sprite channel to display through
- chn+2 ; needs 2 channels per sprite (16 colours)
- Wend
- ;
- Return
-
-
- .movesprites
- ;
- USEPATH sprites()
- ResetList sprites()
- While NextItem(sprites())
- \sx+\xv ;
- If \sx<0 Then \xv=-\xv:\sx=0 ; bounce off walls
- If \sx>256 Then \xv=-\xv:\sx=256 ;
- ;
- \yv+1 ;
- \sy+\yv ; bounce off ground
- If \sy>194 Then \yv=-10-Rnd(10):\sy=194 ;
- ;
- DisplaySprite 0,0,\sx,\sy,\ch ; show the sprite
- Wend
- ;
- Return
-